// main.cpp
#include <dlfcn.h>
#include <iostream>

int main()
{
    // 1. 打开动态库
    void* handle = dlopen("/data/TUTORIAL/concurrency_parallelism/bazel-bin/load_shared_lib/example1_plugin.so", RTLD_LAZY);
    if (!handle) {
        std::cerr << "dlopen failed: " << dlerror() << std::endl;
        return 1;
    }

    // 2. 清理上一次错误
    dlerror();

    // 3. 获取函数指针
    using HelloFunc = void (*)();
    HelloFunc hello = (HelloFunc)dlsym(handle, "hello");

    const char* error = dlerror();
    if (error != nullptr) {
        std::cerr << "dlsym failed: " << error << std::endl;
        dlclose(handle);
        return 1;
    }

    // 4. 调用函数
    hello();

    // 5. 关闭动态库
    dlclose(handle);
    return 0;
}
